home *** CD-ROM | disk | FTP | other *** search
/ 10,000 Great Games / 10,000 Great Games.iso / Product / 66 / data1.cab / Source_Files / Src / ControlLvl.cpp < prev    next >
C/C++ Source or Header  |  2000-01-16  |  2KB  |  96 lines

  1. #include "stdafx.h"
  2.  
  3. template <class T>
  4. static void control_all(T *l)
  5. {
  6.     int kill;
  7.     T *n;
  8.     
  9.     for (T *o = l; o != 0; o = n)
  10.     {
  11.         // Control object
  12.         
  13.         kill = !o->control();
  14.         
  15.         // Get next pointer
  16.         
  17.         n = (T *)o->next;
  18.         
  19.         // Check if object has to be removed
  20.         
  21.         if (kill)
  22.             delete o;
  23.     }
  24. }
  25.  
  26. static void control_with_dirty(cGameObject *l)
  27. {
  28.     int kill;
  29.     cGameObject *n;
  30.     
  31.     for (cGameObject *o = l; o != 0; o = n)
  32.     {
  33.         // Save old locations
  34.         
  35.         int x1 = o->x1, y1 = o->y1, x2 = o->x2, y2 = o->y2;
  36.         
  37.         // Control object
  38.         
  39.         kill = !o->control();
  40.         
  41.         // Get next pointer
  42.         
  43.         n = (cGameObject *)o->next;
  44.         
  45.         // Check if object has to be removed
  46.         
  47.         if (kill)
  48.         {
  49.             // If object moved make old spot dirty
  50.             
  51.             if (x1 != o->x1 || y1 != o->y1 || x2 != o->x2 || y2 != o->y2)
  52.                 o->surface->add_dirty(x1, y1, x2, y2);
  53.             
  54.             // Delete will make area currently occupied dirty
  55.             
  56.             delete o;
  57.         }
  58.         else if (o->is_dirty() || x1 != o->x1 || y1 != o->y1 || x2 != o->x2 || y2 != o->y2)
  59.         {
  60.             // Make rectangles dirty
  61.                 
  62.             o->surface->add_dirty(x1, y1, x2, y2);
  63.             o->surface->add_dirty(o->x1, o->y1, o->x2, o->y2);
  64.         }
  65.     }
  66. }
  67.  
  68. void control_level()
  69. {
  70.     // Make random things
  71.     
  72.     cBubble::make();
  73.     
  74.     // First everything except players
  75.     
  76.     control_with_dirty(scenery_back1);
  77.     control_with_dirty(scenery_back2);
  78.     control_with_dirty(scenery_game1);
  79.     control_with_dirty(scenery_game2);
  80.     control_with_dirty(scenery_game3);
  81.     control_with_dirty(structures);
  82.     control_with_dirty(stairs);
  83.     control_with_dirty(bubbles);
  84.     control_with_dirty(bonus);
  85.     control_with_dirty(weapons);        
  86.     
  87.     control_with_dirty(disaster);
  88.     control_with_dirty(parts);
  89.     control_with_dirty(effects);
  90.         
  91.     // Players and their scores last
  92.     
  93.     control_with_dirty(players);
  94.     control_all(scores);
  95. }
  96.